GDIR=..

## Get files, includes and libraries needed for GIMI
include $(GDIR)/GIMI/Makefile.gimi


CC=gcc
CXX=g++
LD=g++
CFLAGS=-Wall $(DEBUG) $(DEFINITIONS) $(CINCLUDES) $(CMISCFLAGS) $(CE)
CPPFLAGS=-Wall $(DEBUG) $(EXCEPTIONS) $(CPPINCLUDES) $(DEFINITIONS) $(CPPMISCFLAGS) $(CE)
LDFLAGS=
DEBUG=-O0 -g3
CMISCFLAGS=
CPPMISCFLAGS=-Weffc++ -Wextra -DGIMI_CLIENT_API=20000
DEFINITIONS=-DLINUX_OS
EXCEPTIONS=-fexceptions

CINCLUDES=$(INCGIMI)
CPPINCLUDES=$(INCGIMI)

LIBS=$(LIBSGIMI)

SRCSC=
SRCSCPP=

SRCGIMITEST=gimitest.cpp
SRCSOCKETTEST=sockettest.cpp

## Construct final lists of CPP and C objects
OBJSC=$(CGIMI:.c=.o) $(SRCSC:.c=.o)
OBJSCPP=$(CPPGIMI:.cpp=.opp) $(SRCSCPP:.cpp=.opp)

OBJGIMITEST=$(SRCGIMITEST:.cpp=.opp)
OBJSOCKETTEST=$(SRCSOCKETTEST:.cpp=.opp)

## Define compiles and links
COMPILEC=$(CC) $(CFLAGS) -c
COMPILECPP=$(CXX) $(CPPFLAGS) -c
LINK=$(LD) $(LDFLAGS) $(LIBS)

.PHONY: all clean


##############################################
all:	gimitest
##############################################

libGIMI.a: $(OBJSC) $(OBJSCPP)
	@ar rv $@ $^
	@echo "      [AR] $@"
	@ranlib $@
	@echo "      [RANLIB] $@"

.libGIMI.a-dist.marker: libGIMI.a
	@echo "      [STRIP] $^"
	@strip --strip-debug $^
	@if test "`uname -m`" = "x86_64"; \
		then echo "64bit architecture detected"; cp -v $^ $(GDIR)/lib64/; \
		else echo "32bit architecture detected"; cp -v $^ $(GDIR)/lib32/; \
		fi
	@touch .libGIMI.a-dist.marker

PHONY: libGIMI.a-dist
libGIMI.a-dist: .libGIMI.a-dist.marker

###############################################

gimitest: libGIMI.a $(OBJGIMITEST)
	@$(LINK) -L . -o $@ $(OBJGIMITEST) -lGIMI
	@echo "      [LD] $@"

###############################################
sockettest: $(OBJSC) $(OBJSCPP) $(OBJSOCKETTEST)
	@$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJSOCKETTEST)
	@echo "      [LD] $@"

###############################################


gimi_python_wrap: $(OBJSC) $(OBJSCPP) gimi.i gimimessage.i datatypedefinitions.i\
 gimiprotocoltypes.i
#	rm -f _gimi.so
#	swig -c++ -python $(INCGIMI) -o gimiprotocoltypes_wrap.cpp gimiprotocoltypes.i
#	$(COMPILECPP) -fpic -I /usr/include/python2.5 \
#		      -c gimiprotocoltypes_wrap.cpp -o gimiprotocoltypes_wrap.opp 
#	$(LINK) -shared -fpic -o _gimiprotocoltypes.so $(OBJSC) $(OBJSCPP)\
#		      gimiprotocoltypes_wrap.opp
#	swig -c++ -python $(INCGIMI) -o datatypedefins_wrap.cpp datatypedefinitions.i
#	$(COMPILECPP) -fpic -I /usr/include/python2.5 \
#		      -c datatypedefins_wrap.cpp -o datatypedefins_wrap.opp 
#	$(LINK) -shared -fpic -o _datatypedefins.so $(OBJSC) $(OBJSCPP)\
#		      datatypedefins_wrap.opp
	swig -c++ -python $(INCGIMI) -o gimimessage_wrap.cpp gimimessage.i
	$(COMPILECPP) -fpic -I /usr/include/python2.5 \
		      -c gimimessage_wrap.cpp -o gimimessage_wrap.opp 
	$(LINK) -shared -fpic -o _gimimessage.so $(OBJSC) $(OBJSCPP)\
		      gimimessage_wrap.opp
	swig -c++ -python $(INCGIMI) -o gimi_wrap.cpp gimi.i
	$(COMPILECPP) -fpic -I /usr/include/python2.5 \
		      -c gimi_wrap.cpp -o gimi_wrap.opp 
	$(LINK) -shared -fpic -o _gimi.so $(OBJSC) $(OBJSCPP)\
		      gimi_wrap.opp

datatypedefins_python_wrap: datatypedefinitions.i
	swig -c++ -python $(INCGIMI) -o datatypedefins_wrap.cpp datatypedefinitions.i
	$(COMPILECPP) -fpic -I /usr/include/python2.5 \
		      -c datatypedefins_wrap.cpp -o datatypedefins_wrap.opp 
	$(LINK) -shared -fpic -o _datatypedefins.so $(OBJSC) $(OBJSCPP)\
		      datatypedefins_wrap.opp

gimiprotocoltypes_python_wrap: gimiprotocoltypes.i
	swig -c++ -python $(INCGIMI) -o gimiprotocoltypes_wrap.cpp gimiprotocoltypes.i
	$(COMPILECPP) -fpic -I /usr/include/python2.5 \
		      -c gimiprotocoltypes_wrap.cpp -o gimiprotocoltypes_wrap.opp 
	$(LINK) -shared -fpic -o _gimiprotocoltypes.so $(OBJSC) $(OBJSCPP)\
		      gimiprotocoltypes_wrap.opp

clean:
	rm -f $(OBJSC) $(OBJSCPP) $(OBJGIMITEST) $(OBJSOCKETTEST) gimitest sockettest *.out *~ *.d *.dpp

## Compile rule for all .o (.c) file
%.o:    %.c
	@$(COMPILEC) -o $@ $<
	@echo "      [CC] $<"

## Compile rule for all .opp (.cpp) files
%.opp:	%.cpp
	@$(COMPILECPP) -o $@ $<
	@echo "      [CXX] $<"

##############################################
##############################################
.PHONY: depend
depend:
	@touch Makefile.c.dep Makefile.cpp.dep
	@makedepend -f Makefile.cpp.dep -o.opp -- $(CPPFLAGS) -- *.cpp $(OBJSCPP:.opp=.cpp) >/dev/null 2>&1
	@makedepend -f Makefile.c.dep -o.o -- $(CFLAGS) -- *.c $(OBJSC:.o=.c) >/dev/null 2>&1
###############################################
-include Makefile.cpp.dep
-include Makefile.c.dep
##############################################
##############################################
